package initialization

import (
	"common/config"
	"encoding/json"
	"github.com/nacos-group/nacos-sdk-go/clients"
	"github.com/nacos-group/nacos-sdk-go/common/constant"
	"github.com/nacos-group/nacos-sdk-go/vo"
	"log"
)

type Nachos struct {
	Mysql struct {
		User     string `json:"user"`
		Password string `json:"password"`
		Host     string `json:"host"`
		Port     int    `json:"port"`
		Database string `json:"database"`
	} `json:"mysql"`
	Redis struct {
		Addr     string `json:"addr"`
		Password string `json:"password"`
		Db       int    `json:"db"`
	} `json:"redis"`
	Consul struct {
		Hort string `json:"Hort"`
		Port int    `json:"port"`
	} `json:"consul"`
	Aliyun struct {
		AccessKeyID     string `json:"AccessKeyID"`
		AccessKeySecret string `json:"AccessKeySecret"`
		Bucket          string `json:"bucket"`
	} `json:"aliyun"`
	Alipay struct {
		PrivateKey string `json:"privateKey"`
		AppId      string `json:"appId"`
		NotifyURL  string `json:"NotifyURL"`
		ReturnURL  string `json:"ReturnURL"`
	} `json:"alipay"`
	Es struct {
		Addr string `json:"addr"`
	} `json:"Es"`
	Mongodb struct {
		User       string `json:"user"`
		Passwd     string `json:"passwd"`
		Hort       string `json:"Hort"`
		Port       int    `json:"port"`
		Database   string `json:"Database"`
		Collection string `json:"Collection"`
	} `json:"mongodb"`
	Txy struct {
		AccessKeyID     string `json:"AccessKeyID"`
		AccessKeySecret string `json:"AccessKeySecret"`
	} `json:"txy"`
	GaoDe struct {
		Key string `json:"key"`
	} `json:"gaoDe"`
	UserServer struct {
		Hort string `json:"Hort"`
		Port int    `json:"port"`
	} `json:"user_server"`
	ProductServer struct {
		Hort string `json:"Hort"`
		Port int    `json:"port"`
	} `json:"product_server"`
	OrderServer struct {
		Hort string `json:"Hort"`
		Port int    `json:"port"`
	} `json:"order_server"`
}

var Config Nachos

func InitNachos() {
	cf := config.ViperData.Nachos
	clientConfig := constant.ClientConfig{
		NamespaceId:         cf.NamespaceId, // 如果需要支持多namespace，我们可以场景多个client,它们有不同的NamespaceId。当namespace是public时，此处填空字符串。
		TimeoutMs:           5000,
		NotLoadCacheAtStart: true,
		LogDir:              "/tmp/nacos/log",
		CacheDir:            "/tmp/nacos/cache",
		LogLevel:            "debug",
	}
	serverConfigs := []constant.ServerConfig{
		{
			IpAddr:      cf.IpAddr,
			ContextPath: "/nacos",
			Port:        uint64(cf.Port),
			Scheme:      "http",
		},
	}
	client, err := clients.CreateConfigClient(map[string]interface{}{
		"serverConfigs": serverConfigs,
		"clientConfig":  clientConfig,
	})
	if err != nil {
		log.Fatalln(err)
	}
	content, err := client.GetConfig(vo.ConfigParam{
		DataId: cf.DataId,
		Group:  cf.Group,
	})
	if err != nil {
		log.Fatalln(err)
	}
	err = json.Unmarshal([]byte(content), &Config)
	if err != nil {
		return
	}
	log.Println("init nachos success")
}
